perm filename CARNES.FAI[AER,HPM]1 blob sn#158971 filedate 1975-05-13 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002		TITLE	CARNES
C00004 00003	AR2TAB:	MOVEI	T,44			TOTAL BITS/WORD
C00006 00004	X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
C00035 00005		END
C00036 ENDMK
C⊗;
	TITLE	CARNES

;FOR RECOGNIZING CARS
	
	ENTRY	CARNES

	EXTERN	CORGET,CORREL,SQRS
	
	PCLN←←0
	PCWD←←1
	PCBY←←2
	PCBYA←←3
	LNWD←←4
	LNBY←←5
	LNBYA←←6
	WDBY←←7
	WDBI←←10
	BYBI←←11
	BPTAB←←12
	LINTAB←←13

	T←1  ↔  TT←2  ↔  TTT←3  ↔  ARRY1←4  ↔  ARRY2←5  ↔  P←17
	A←6  ↔  B←7  ↔  C←10  ↔  D←11  ↔  E←13  ↔  F←14  ↔  G←15


RETAD:	0
TEMP:	BLOCK	25		;TEMPORARY STORAGE FOR STUFF
AR2TAB:	MOVEI	T,44			;TOTAL BITS/WORD
	IDIV	T,BYBI(ARRY2)		;BYTE SIZE
	MOVEM	T,WDBY(ARRY2)		;BYTES PER WORD
	SUBI	TT,44			;-NUMBER OF USED BITS/WORD
	MOVNM	TT,WDBI(ARRY2)		;SAVED
	ADD	T,LNBY(ARRY2)
	SUBI	T,1
	IDIV	T,WDBY(ARRY2)		;NUMBER OF WORDS/SCANLINE
	MOVEM	T,LNWD(ARRY2)
	MOVE	TT,T	 		;WORDS/LINE
	IMUL	TT,WDBY(ARRY2)		;BYTES/WORD
	MOVEM	TT,LNBYA(ARRY2)		;GIVES BYTES/LINE, INCLUDING NULLS
	IMUL	TT,PCLN(ARRY2)
	MOVEM	TT,PCBYA(ARRY2)		;TOTAL BYTES/PIC, INCL. NULLS
	IMUL	T,PCLN(ARRY2)		;LINES IN THE PICTURE
	MOVEM	T,PCWD(ARRY2)		;WORDS IN THE PICTURE
	MOVE	T,LNBY(ARRY2)
	IMUL	T,PCLN(ARRY2)
	MOVEM	T,PCBY(ARRY2)		;BYTES/PIC, NOT INCL. NULLS
	MOVEI	T,14(ARRY2)
	ADD	T,PCLN(ARRY2)
	MOVEM	T,BPTAB(ARRY2)		;ADDRESS OF BYTE POINTER TABLE
	ADD	T,LNBYA(ARRY2)		;ADDR OF FIRST WORD IN PICTURE
	MOVN	TT,PCLN(ARRY2)		;SET UP CNTR FOR LINE ADDRESSES
	HRL	TT,TT
	HRRI	TT,LINTAB(ARRY2)
LTLP:	MOVEM	T,(TT)			;MAKE LINE TABLE
	ADD	T,LNWD(ARRY2)
	AOBJN	TT,LTLP
	MOVN	TT,BPTAB(ARRY2)
	HRL	TT,LNBYA(ARRY2)		;SET UP CNTR FOR BYTE TABLE
	AOBJN	TT,			;DECR ADDRESS AND INCR COUNT BY 1
	MOVN	TT,TT
	MOVEI	T,4400
	ADD	T,BYBI(ARRY2)
	LSH	T,6
	HRLZ	T,T
BYLP:	MOVEM	T,(TT)			;MAKE BYTE POINTER TABLE
	IBP	T
	AOBJN	TT,BYLP
	POPJ	P,
X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
AX1←←TEMP ↔ AY1←←TEMP+1 ↔ AX2←←TEMP+2 ↔ AY2←←TEMP+3
BX1←←TEMP+4 ↔ BY1←←TEMP+5 ↔ BX2←←TEMP+6 ↔ BY2←←TEMP+7
SOUWIN←←TEMP+10 ↔ DESWIN←←TEMP+11 ↔ DEXSKP←←TEMP+12 ↔ DEYSKP←←TEMP+13
WSIZ1←←TEMP+14 ↔ DWSIZ←←TEMP+15 ↔ WSIZY1←←TEMP+16 ↔ VARIAN←←TEMP+17
SOUSIZ←←TEMP+20 ↔ WSIZ←←TEMP+21 ↔ DWSIZ←←TEMP+22 ↔ NEGXC←TEMP+23

MATCH:	POP	P,RETAD
	POP	P,BX2		;A CARRELATOR. FINDS THE BEST MATCH
	POP	P,BY2		;TO A CAR
	POP	P,BX1		;IN ARRY2(BX1:BY1,BX2:BY2)
	POP	P,BY1
	POP	P,ARRY2
	MOVE	X1,BX1
	MOVE	X2,BX2		;   VCAR(PIC1,AX1,AY1,AX2,AY2,
	MOVE	Y1,BY1		;         PIC2,BX1,BY1,BX2,BY2);
	MOVE	Y2,BY2

FIXB:	CAMLE	X1,X2		;FIRST FIX UP THE LIMITS SO
	EXCH	X1,X2		;X1≤X2, X1≥0 X2<WIDTH ETC.
	CAIGE	X1,0
	MOVEI	X1,0
	MOVE	T,LNBY(ARRY2)
	CAML	X2,T
	MOVEI	X2,-1(T)

	CAMLE	Y1,Y2		;SIMILAR FOR Y
	EXCH	Y1,Y2
	CAIGE	Y1,0
	MOVEI	Y1,0
	MOVE	T,PCLN(ARRY2)
	CAML	Y2,T
	MOVEI	Y2,-1(T)

	CAMG	X1,X2
	CAMLE	Y1,Y2
	JRST	FIXB

	MOVEM	X1,BX1
	MOVEM	X2,BX2
	MOVEM	Y1,BY1
	MOVEM	Y2,BY2

	MOVE	T,BX2		;QUIT IF DESTINATION WINDOW IS TOO SMALL
	SUB	T,BX1
	SUBI	T,=11	
	JUMPGE	T,QUITR

	MOVE	T,BY2
	SUB	T,BY1
	SUBI	T,=24
	JUMPGE	T,QUITR

THIS←←TT ↔ SIZ←←TTT

	MOVEI	X2,=11
	MOVEI	X1,=1
	MOVEI	Y2,=24
	MOVEI	Y1,=1

	MOVEI	SIZ,1(X2)	;CALCULATE SIZE OF BUFFER AREA
	SUB	SIZ,X1		;FOR THE SOURCE WINDOW CODE
	MOVEM	SIZ,WSIZ1	;WILL BE X WINDOWSIZE-1
	MOVEM	SIZ,WSIZ	;IS X WINDOWSIZ
	MOVNM	SIZ,DEXSKP	;WILL BE DELTA XB - DELTA XA
	MOVEI	T,1(Y2)
	SUB	T,Y1
	MOVEM	T,WSIZY1	;WILL BE X WINDOWSIZE-1
	MOVNM	T,DEYSKP	;WIL BE DELTA YB - DELTA YA
	IMUL	SIZ,T
	MOVEM	SIZ,SOUSIZ	;SOURCE WINDOW SIZE (IN PIXELS)
	ASH	SIZ,1
	ADDI	SIZ,1
	PUSHJ	P,CORGET	;AND MAKE THAT BUFFER
	HALT
	MOVEM	THIS,SOUWIN

	SUBI	THIS,1
	MOVN	T,T
	HRLZ	T,T
	HRRI	T,LINTAB(ARRY1)	;Y COUNTER
	ADD	T,Y1

	MOVE	0,@BX2		;FINISH UP MAKING DELTA XB -DELTA XA
	SUB	0,@BX1
	ADDI	0,1
	MOVEM	0,DWSIZ
	ADDM	0,DEXSKP
	MOVE	0,@BY2		;AND THE Y'S TOO
	SUB	0,@BY1
	ADDI	0,1
	ADDM	0,DEYSKP
	SOS	WSIZ1		;NOT TO MENTION X WINDOWSIZ-1
	SOS	WSIZY1		;AND Y WINDOWSIZ-1

	MOVE	G,[MOVE TT,0(T)]

	MOVE	E,BPTAB(ARRY1)	;BP SKELETON
	ADDI	E,-1(X1)
	MOVE	E,(E)

	SETZB	B,A			;FOR SUM OF X AND X↑2, AS EXPLND BELOW
			;DON'T FORGET! A,B,C,D ARE X1,X2,Y1,Y2 ALSO
ILYLP:	MOVE	F,E			;SETS UP IN LINE CODED
	ADD	F,(T)			;STUFF FOR THE INNER
	MOVE	TTT,WSIZ		;"LOOP" OF THE CORRELATION
ILXLP:	PUSH	THIS,G			;A SEQUENCE OF
	ADDI	G,1			; MOVN TT,POSB(T)
	ILDB	C,F			; ADD  A,SQRS+PIXEL(TT)
	ADD	B,C
	ADD	A,SQRS(C)
	ADD	C,[ADD	A,SQRS(TT)]
	PUSH	THIS,C
	SOJG	TTT,ILXLP
	ADD	G,DEXSKP
	AOBJN	T,ILYLP

	PUSH	THIS,[JRST INRDON]	;AND THE FINAL INSTR.
	
;CALCULATE SUM[(X-XBAR)↑2] ALSO. THIS IS SAME AS SUM[X↑2-2 X XBAR+XBAR↑2],
;WHICH IS SUM[X↑2]-2 XBAR SUM[X]+XBAR↑2*N OR, SINCE XBAR=SUM[X]/N,
;SUM[X↑2]-2(SUM[X])↑2/N+(SUM[X])↑2/N WHICH IS SUM[X↑2]-(SUM[X])↑2/N
; THIS QUANTITY WILL BE CALLED VARIANCE

	IMUL	B,B
	IDIV	B,SOUSIZ
	SUB	A,B
	MOVEM	A,VARIAN


	MOVE	X1,BX1			;MAKE THE DESTINATION
	MOVE	X2,BX2			;WINDOW BUFFER
	MOVE	Y1,BY1
	MOVE	Y2,BY2
	MOVEI	SIZ,1(X2)
	SUB	SIZ,X1
	MOVEM	SIZ,DWSIZ
	MOVEI	T,1(Y2)
	SUB	T,Y1
	IMUL	SIZ,T
	PUSHJ	P,CORGET
	HALT
	MOVEM	THIS,DESWIN

	SUBI	THIS,1
	MOVN	T,T			;Y COUNTER
	HRLZ	T,T
	HRRI	T,LINTAB(ARRY2)
	ADD	T,Y1

	MOVE	E,BPTAB(ARRY2)		;BYTE POINTER SKELETON
	ADDI	E,-1(X1)		;FOR DESTINATION
	MOVE	E,(E)

BUYLP:	MOVE	F,E			;UNPACKS THE DESTINATION
	ADD	F,(T)			;WINDOW, ONE WORD/SAMPLE
	MOVE	TTT,DWSIZ
BUXLP:	ILDB	0,F
	PUSH	THIS,0
	SOJG	TTT,BUXLP
	AOBJN	T,BUYLP

	MOVN	B,DEXSKP		;NOW ACTUALLY CORRELATE
	SUBI	B,1
	MOVEM	B,NEGXC

	HRLZI	D,377777		;VALUE OF BEST MATCH IN D
	MOVE	E,DESWIN		;LOCATION IN E
	MOVE	TTT,DEYSKP		;NUMBER OF ROWS
	MOVE	T,DESWIN		;WHERE TO START
CRYLP:	HRL	T,NEGXC			;INIT X CNTR, BUT KEEP OLD POSN
CRXLP:	SETZB	A,B			;ACCUMULATE CURRENT SUM IN A
	STEZB	C,D
	JRST	@SOUWIN			;JUMP TO PREVIOUSLY CREATED CODE



	AOBJN	T,CRXLP			;SHIFT IN X, AND TRY AGAIN
	ADD	T,WSIZ1			;ADD WHATS NEEDED TO GET TO NEXT
	SOJGE	TTT,CRYLP			;SCANLINE, AND TRY AGAIN

	SUB	E,DESWIN		;DECOMPOSE SAVED BEST LOCATION
	IDIV	E,DWSIZ			;INTO X AND Y PARTS
	ADDB	E,@BY1			;ACTUAL LOWER Y BOUND OF BEST MATCH
	ADDB	F,@BX1			;ACTUAL LOWER X BOUND OF BEST MATCH
	ADD	F,WSIZ1			;COMPUTE UPPER X BOUND
	MOVEM	F,@BX2			;AND RETURN IT
	ADD	E,WSIZY1		;UPPER Y BOUND
	MOVEM	E,@BY2			;RETURNED

	MOVE	THIS,SOUWIN		;RETURN THE USED CORAGE
	PUSHJ	P,CORREL
	MOVE	THIS,DESWIN
	PUSHJ	P,CORREL

	MOVE	1,D			;GET READY TO RETURN VALUE OF MATCH
	ASH	1,4			;SCALE IT UP BY 2↑4
	IDIV	1,VARIAN		;NORMALIZE
	JRST	@RETAD			;AND RETURN
	END